home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 140 / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan).7z / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan) (Track 1).bin / tools / xpicw / xpicw110.lzh / WLSource / left2.s < prev    next >
Text File  |  1997-04-10  |  2KB  |  143 lines

  1. *    left2.s
  2. *        左スクロールその2 / 最高速 = 5
  3. *            by Mitsuky
  4.  
  5.  
  6. SPEED_MAX    equ    5
  7.  
  8.     .offset    8        * 引き数
  9. _source_ptr:    .ds.l    1
  10. _dest_ptr:    .ds.l    1
  11. _speed:        .ds.l    1
  12. _vdisp:        .ds.l    1
  13.  
  14.  
  15.  
  16.     .text
  17.     .even
  18.  
  19.     .dc.b    'WL10',$0d,$0a
  20.     .dc.b    '左スクロールその2 / 最高速 = 5',$0d,$0a
  21.     .dc.b    '    by Mitsuky',$0d,$0a
  22.     .dc.b    $1a
  23.     .even
  24.  
  25. left2:
  26.     link    a6,#0
  27.     movem.l    d1-d7/a0-a5,-(sp)
  28.  
  29.     move.l    _speed(a6),d0    * d0.w =
  30.     bmi    left2_ask_speed
  31.     cmpi.l    #SPEED_MAX,d0
  32.     bhi    left2_err
  33.  
  34.     tst.l    _vdisp(a6)
  35.     bmi    left2_ask_vdisp
  36.  
  37.  
  38.  
  39.     moveq.l    #1,d1
  40.     lsl.w    d0,d1
  41.     swap.w    d1        * d1.l = 1回当たりのスクロール値
  42.  
  43.     moveq.l    #2,d3
  44.     lsl.w    d0,d3
  45.     addi.w    #1024*16,d3    * d3.w = (下に解説有り)
  46.  
  47.     moveq.l    #2,d2
  48.     lsl.l    d0,d2
  49.     addi.l    #1024*512,d2    * d2.l = (下に解説有り)
  50.  
  51.     moveq.l    #1,d5
  52.     lsl.w    d0,d5
  53.     move.l    #512,d7
  54.     sub.w    d5,d7
  55.     swap.w    d7        * d7.w = スクロールY座標
  56.     subq.w    #1,d5        * d5.w = V-SYNC 当たりのループ回数-1
  57.  
  58.     move.w    #512,d6
  59.     lsr.w    d0,d6
  60.     subq.w    #1,d6        * d6.w = ループ回数-1
  61.  
  62.     movea.l    _source_ptr(a6),a3
  63.     movea.l    _dest_ptr(a6),a4
  64.     adda.l    #511*2,a3        * a3.l = 転送元アドレス
  65.     adda.l    #511*2,a4        * a4.l = 転送先アドレス
  66.  
  67.  
  68. loop:
  69.     bsr    vdisp
  70.  
  71.     moveq.l    #512/16-1,d0
  72. loop_y1:
  73.     move.w    d5,d4        * d5.w =
  74. loop_y2:
  75.     move.w    (a3),(a4)
  76.     move.w    1024*1(a3),1024*1(a4)
  77.     move.w    1024*2(a3),1024*2(a4)
  78.     move.w    1024*3(a3),1024*3(a4)
  79.     move.w    1024*4(a3),1024*4(a4)
  80.     move.w    1024*5(a3),1024*5(a4)
  81.     move.w    1024*6(a3),1024*6(a4)
  82.     move.w    1024*7(a3),1024*7(a4)
  83.     move.w    1024*8(a3),1024*8(a4)
  84.     move.w    1024*9(a3),1024*9(a4)
  85.     move.w    1024*10(a3),1024*10(a4)
  86.     move.w    1024*11(a3),1024*11(a4)
  87.     move.w    1024*12(a3),1024*12(a4)
  88.     move.w    1024*13(a3),1024*13(a4)
  89.     move.w    1024*14(a3),1024*14(a4)
  90.     move.w    1024*15(a3),1024*15(a4)
  91.     subq.w    #2,a3
  92.     subq.w    #2,a4
  93.     dbra    d4,loop_y2
  94.  
  95.     adda.w    d3,a3        * d3.w = 1024*16+2*(1回に描画するX)
  96.     adda.w    d3,a4
  97.     dbra    d0,loop_y1
  98.     sub.l    d1,d7
  99.     suba.l    d2,a3        * d2.l = 1024*512+2*(1回に描画するX)
  100.     suba.l    d2,a4
  101.     dbra    d6,loop
  102.  
  103.  
  104. left2_rts:
  105.     moveq.l    #0,d0
  106. left2_rts_2:
  107.     movem.l    (sp)+,d1-d7/a0-a5
  108.     unlk    a6
  109.     rts
  110.  
  111.  
  112. ****    ****
  113. vdisp:
  114.     movem.l    a0,-(sp)
  115.     move.l    _vdisp(a6),a0
  116.     jsr    (a0)
  117.     movem.l    (sp)+,a0
  118.     rts
  119.  
  120.  
  121. ****    ****
  122. left2_err:
  123.     moveq.l    #-1,d0
  124.     bra    left2_rts_2
  125.  
  126.  
  127. ****    ****
  128. left2_ask_speed:
  129.     moveq.l    #SPEED_MAX,d0
  130.     bra    left2_rts_2
  131.  
  132.  
  133. ****    ****
  134. left2_ask_vdisp:
  135.     move.l    _speed(a6),d0
  136.     lea.l    ask_vdisp_table(pc),a0
  137.     add.w    d0,d0
  138.     move.w    (a0,d0.w),d0
  139.     bra    left2_rts_2
  140.  
  141. ask_vdisp_table:
  142.     .dc.w    512,256,128,64,32,16
  143.